/* eslint-disable no-undef */
/* eslint-disable no-redeclare */
// 一、
// GO{
//   b:undefined
//   a:undefined->f a(){}
//   fn1:f fn1(){}
// }
function fn1(a, b) {
    // AO{
    //   b:undefined
    //   a:undefined->1->f a(){}
    // }
    console.log(a); //f a(){}
    console.log(b); //undefined
    var b = 234; //b(undefined)->234
    console.log(b); //234
    a = 123; //a(a(){})->123
    console.log(a); //123

    function a() {}
    var a;
    b = 234; //b(234)->234
    var b = function () {}; //b(234)->f(){}
    console.log(a); //123
    console.log(b); //f (){}
}
fn1(1);

// 二、
// GO{
//   a:undefined
//   b:undefined
//   c:undefined
//   fn2:f fn2(){}
//   e:f e(){}
//   f:undefined
// }
a = 100;
function fn2(e) {
    // AO{
    //   a:undefined
    //   b:undefined
    //   c:undefined
    //   e:f e(){}
    //   f:undefined
    // }
    function e() {}
    arguments[0] = 2; //e->2
    console.log(e); //2
    // a 为undefined不进入循环
    if (a) {
        var b = 123;
        console.log(b);
    }
    var c;
    a = 10; //a(undefined)->10
    var a;
    console.log(b); //undefined
    f = 123; //f(undefined)->123
    console.log(c); //undefined
    console.log(a); //10
}
// 48行 a(10)->100
var a;
fn2(1);
console.log(a); // 100
console.log(f); // 123

// 三、
// GO{
//   global:undefined
//   f3:f f3(){}
// }
global = 100;
function fn3(global) {
    // AO{
    //   gobal:undefined->100
    // }
    console.log(global); //100
    global = 200; //global(100)->200
    console.log(global); //200
    var global = 300; //global(200)->300
}
// 第84行 global(undefined)->100
fn3(global);
var global;

// 四、
// GO{
//   d:undefined
//   c:undefined->f c(){}
//   a:undefined->f a(){}
//   b:undefined
//   f4:f f4(){}
// }
function fn4(a) {
    // AO{
    //   d:undefined
    //   c:f c(){}
    //   a:f a(){}->5->f a(){}
    //   b:undefined
    // }
    var d;
    var c;
    b = 10; //b(undefied)->10
    var a;
    console.log(a); //f a(){}
    a = 123; //a(5)->123

    function a() {}
    console.log(a); //123
    var b;
    console.log(b); //10

    function c() {}
    console.log(c); //f c(){}
    console.log(d); //undefined
    d = 100; //d(undefined)->100
    console.log(d); //100
}
fn4(5);

// 五、
let obj = {
    a: 110,
    fn: function (a) {
        console.log(a);
        a = 10;
        console.log(a);
    },
};

obj.fn(obj.a);
//obj.a -> 110
//fn(110) ->110 10
// obj.fn(obj.a)  ->110 10

// 六、
// 1,1,2,3,5,8,13,.....
// 求第n项的和, 例子: 求第三项的和, 1 + 1 + 2
function fpnqSum(n) {
    if (n <= 0) {
        return 0;
    } else if (n === 1) {
        return 1;
    } else {
        return fpnqSum(n - 1) + fpnqSum(n - 2) + 1;
    }
}
console.log(fpnqSum(8));

// 七、
// 要求输入id 返回数据对象
// 例如: 输入id=111, 返回{id: 111,gname: '海尔冰箱'}
var data = [
    {
        id: 1,
        name: '家电',
        goods: [
            {
                id: 11,
                gname: '冰箱',
                goods: [
                    {
                        id: 111,
                        gname: '海尔冰箱',
                    },
                    {
                        id: 112,
                        gname: '小天鹅冰箱',
                    },
                ],
            },
            {
                id: 12,
                gname: '洗衣机',
            },
        ],
    },
    {
        id: 2,
        name: '服饰',
    },
];
let fingId = 111;
function findId(data, Id) {
    // 循环遍历数组里面的对象
    for (let i = 0; i < data.length; i++) {
        const item = data[i];
        //当前对象中找到就返回对象
        if (item.id === Id) {
            return item;
        }
        // 没找到则找该对象下有goods
        if (item.goods) {
            const find = findId(item.goods, Id);
            if (find) {
                return find;
            }
        }
    }
}
findId(data, fingId);
